/*******************************************************************************
 *    系统名称   ：GMAgent服务系统
 *    公司      ： 成都欢娱乐互动
 *    文件名    ： Request.java
 *              (C) Copyright joyct Corporation 2011
 *               All Rights Reserved.
 * *****************************************************************************
 *    注意： 本内容仅限于 成都欢娱乐互动公司内部使用，禁止转发
 ******************************************************************************/
package com.ricky.core.net.abs;


import java.util.concurrent.ConcurrentHashMap;

import com.ricky.core.net.msg.Context;
import com.ricky.handler.IHandler;

/***
 *	Request.java</br>
 *	@author pu
 *  @Data 2011-11-2</br>
 *	@version v0.1</br>
 *	@Discription 当前连接
 ***/
public abstract class Request {

	/**
	 * 得道属性值
	 * @param key
	 * @return
	 */
    public abstract Object getAttribute(Object key);
    
    /**
     * 设置属性值
     * @param key
     * @param value
     */
    public abstract void setAttribute(Object key,Object value);
    
	/**
	 * 发送消息
	 * @param message
	 */
	public abstract void sendMessage(Context<?> message);
	
	public abstract boolean isConnected();
	
	/**
	 * 关闭链接
	 * @return 
	 */
	public abstract void close();
	
	//***************************
	private Boolean isValidate=false;
	

	//////////////////////////////////////////////////////////////////////////
	//IHandler相关操作
	/////////////////////////////////////////////////////////////////////////

	private ConcurrentHashMap<String,IHandler> handlers=new ConcurrentHashMap<String,IHandler>();
	
	public void register(String url,IHandler handler)
	{
		if(!handlers.contains(url))
			handlers.put(url, handler);
	}
	
	public void removeRegister(String url)
	{
		handlers.remove(url);
	}
	
	public void clearAllRegister()
	{
		handlers.clear();
	}
	
	public IHandler getHandler(String url){
		IHandler handler=null;
		handler=handlers.get(url);
		return handler;
	}

	/**
	 * 是否验证登陆
	 * @return the isValidate
	 */
	public Boolean isValidate() {
		return isValidate;
	}

	/**
	 * @param isValidate the isValidate to set
	 */
	public void isValidate(Boolean isValidate) {
		this.isValidate = isValidate;
	}

}
